/**
 * CodeSpirit Amis Cards V2.1 - 卡片配置
 * 定义各种卡片类型的默认配置和预设模板
 * 
 * 更新日志 v2.1.0:
 * - 新增表格卡片source属性支持，可从上下文获取数据
 * - 完善表格卡片配置项，支持搜索、分页、批量操作等
 * - 新增表格卡片预设模板：基础表格、source表格、静态表格、高级表格
 * 
 * @version 2.1.0
 * @author CodeSpirit Team
 */

// 确保命名空间存在
window.AmisCards = window.AmisCards || {};

/**
 * 卡片配置定义
 */
const CardConfigs = {
    /**
     * 默认配置
     */
    defaults: {
        // 基础配置
        size: 'medium',
        theme: 'default',
        autoRefresh: false,
        refreshInterval: 30000,
        showRefreshButton: false,
        showFullscreenButton: false,
        showSettingsButton: false,
        
        // 样式配置
        style: {
            borderRadius: '6px',
            boxShadow: '0 2px 8px rgba(0,0,0,0.1)',
            transition: 'all 0.3s ease'
        },
        
        // 权限配置
        permissions: [],
        
        // 数据配置
        data: {
            api: null,
            params: {},
            options: {}
        }
    },

    /**
     * 统计卡片默认配置
     */
    stat: {
        type: 'stat',
        title: '统计卡片',
        subtitle: '',
        size: 'medium',
        theme: 'default',
        data: {
            value: 0,
            label: '',
            unit: '',
            prefix: '',
            suffix: '',
            formatter: null,
            trend: null,
            target: null,
            showProgress: false,
            animateValue: true,
            animationDuration: 2000,
            description: ''
        }
    },

    /**
     * 图表卡片默认配置
     */
    chart: {
        type: 'chart',
        title: '图表卡片',
        subtitle: '',
        size: 'large',
        theme: 'default',
        data: {
            chartType: 'line',
            api: null,
            config: {
                responsive: true,
                maintainAspectRatio: false,
                plugins: {
                    legend: {
                        display: true,
                        position: 'top'
                    },
                    tooltip: {
                        enabled: true,
                        mode: 'index',
                        intersect: false
                    }
                },
                scales: {
                    x: {
                        display: true,
                        grid: {
                            display: true
                        }
                    },
                    y: {
                        display: true,
                        grid: {
                            display: true
                        }
                    }
                }
            }
        }
    },

    /**
     * 信息卡片默认配置
     */
    info: {
        type: 'info',
        title: '信息卡片',
        subtitle: '',
        size: 'medium',
        theme: 'info',
        data: {
            content: '',
            markdown: false,
            actions: []
        }
    },

    /**
     * 操作卡片默认配置
     */
    action: {
        type: 'action',
        title: '操作卡片',
        subtitle: '',
        size: 'medium',
        theme: 'primary',
        data: {
            layout: 'grid',
            actions: []
        }
    },

    /**
     * 表单卡片默认配置
     */
    form: {
        type: 'form',
        title: '表单卡片',
        subtitle: '',
        size: 'large',
        theme: 'default',
        data: {
            mode: 'horizontal',
            api: null,
            submitText: '提交',
            resetText: '重置',
            body: []
        }
    },

    /**
     * 表格卡片默认配置
     */
    table: {
        type: 'table',
        title: '表格卡片',
        subtitle: '',
        size: 'large',
        theme: 'default',
        // 数据源配置（优先级：source > api > data）
        source: null,               // 从上下文获取数据，如：${items} 或 ${data.list}
        api: null,                  // API接口地址
        data: null,                 // 静态数据数组
        // 表格配置
        columns: [],                // 表格列配置
        showSearch: false,          // 是否显示搜索栏
        searchFields: [],           // 搜索字段配置
        showPager: true,            // 是否显示分页
        perPage: 20,                // 每页显示条数
        perPageAvailable: [10, 20, 50, 100], // 可选择的每页条数
        // 表格样式配置
        tableConfig: {
            striped: true,          // 是否显示斑马纹
            bordered: false,        // 是否显示边框
            size: 'sm',            // 表格大小：sm、md、lg
            resizable: true,        // 是否可调整列宽
            columnsTogglable: false // 是否可切换列显示
        },
        // 工具栏和操作
        tableToolbar: [],           // 表格工具栏按钮
        bulkActions: [],            // 批量操作按钮
        rowActions: [],             // 行操作按钮
        operationWidth: 120         // 操作列宽度
    }
};

/**
 * 预设模板
 */
const CardTemplates = {
    /**
     * 统计卡片模板
     */
    statTemplates: {
        // 基础数字统计
        basicNumber: {
            ...CardConfigs.stat,
            title: '基础统计',
            data: {
                ...CardConfigs.stat.data,
                value: 1234,
                label: '总数',
                formatter: 'integer'
            }
        },

        // 货币统计
        currency: {
            ...CardConfigs.stat,
            title: '收入统计',
            theme: 'success',
            data: {
                ...CardConfigs.stat.data,
                value: 98765.43,
                label: '今日收入',
                formatter: 'currency'
            }
        },

        // 百分比统计
        percentage: {
            ...CardConfigs.stat,
            title: '完成率',
            theme: 'info',
            data: {
                ...CardConfigs.stat.data,
                value: 87.5,
                label: '任务完成率',
                formatter: 'percentage'
            }
        },

        // 带趋势的统计
        withTrend: {
            ...CardConfigs.stat,
            title: '用户增长',
            theme: 'primary',
            data: {
                ...CardConfigs.stat.data,
                value: 2468,
                label: '新增用户',
                formatter: 'integer',
                trend: {
                    direction: 'up',
                    value: 12.5,
                    period: '较昨日',
                    percentage: true
                }
            }
        },

        // 带进度条的统计
        withProgress: {
            ...CardConfigs.stat,
            title: '销售目标',
            theme: 'warning',
            data: {
                ...CardConfigs.stat.data,
                value: 7500,
                label: '当前销售额',
                formatter: 'currency',
                target: 10000,
                showProgress: true
            }
        }
    },

    /**
     * 图表卡片模板
     */
    chartTemplates: {
        // 折线图
        lineChart: {
            ...CardConfigs.chart,
            title: '趋势图',
            data: {
                ...CardConfigs.chart.data,
                chartType: 'line',
                config: {
                    ...CardConfigs.chart.data.config,
                    datasets: [{
                        label: '数据趋势',
                        data: [65, 59, 80, 81, 56, 55, 40],
                        borderColor: 'rgb(75, 192, 192)',
                        backgroundColor: 'rgba(75, 192, 192, 0.2)',
                        tension: 0.1
                    }],
                    labels: ['1月', '2月', '3月', '4月', '5月', '6月', '7月']
                }
            }
        },

        // 柱状图
        barChart: {
            ...CardConfigs.chart,
            title: '对比图',
            data: {
                ...CardConfigs.chart.data,
                chartType: 'bar',
                config: {
                    ...CardConfigs.chart.data.config,
                    datasets: [{
                        label: '销售额',
                        data: [12, 19, 3, 5, 2, 3, 7],
                        backgroundColor: [
                            'rgba(255, 99, 132, 0.2)',
                            'rgba(54, 162, 235, 0.2)',
                            'rgba(255, 205, 86, 0.2)',
                            'rgba(75, 192, 192, 0.2)',
                            'rgba(153, 102, 255, 0.2)',
                            'rgba(255, 159, 64, 0.2)',
                            'rgba(199, 199, 199, 0.2)'
                        ],
                        borderColor: [
                            'rgba(255, 99, 132, 1)',
                            'rgba(54, 162, 235, 1)',
                            'rgba(255, 205, 86, 1)',
                            'rgba(75, 192, 192, 1)',
                            'rgba(153, 102, 255, 1)',
                            'rgba(255, 159, 64, 1)',
                            'rgba(199, 199, 199, 1)'
                        ],
                        borderWidth: 1
                    }],
                    labels: ['周一', '周二', '周三', '周四', '周五', '周六', '周日']
                }
            }
        },

        // 饼图
        pieChart: {
            ...CardConfigs.chart,
            title: '分布图',
            data: {
                ...CardConfigs.chart.data,
                chartType: 'pie',
                config: {
                    ...CardConfigs.chart.data.config,
                    datasets: [{
                        label: '数据分布',
                        data: [300, 50, 100, 80, 120],
                        backgroundColor: [
                            '#FF6384',
                            '#36A2EB',
                            '#FFCE56',
                            '#4BC0C0',
                            '#9966FF'
                        ]
                    }],
                    labels: ['红色', '蓝色', '黄色', '绿色', '紫色']
                }
            }
        }
    },

    /**
     * 信息卡片模板
     */
    infoTemplates: {
        // 基础信息
        basicInfo: {
            ...CardConfigs.info,
            title: '系统通知',
            theme: 'info',
            data: {
                ...CardConfigs.info.data,
                content: '<h5>欢迎使用 AmisCards</h5><p>这是一个基于 Amis 的卡片系统，提供丰富的卡片类型和配置选项。</p>'
            }
        },

        // 警告信息
        warningInfo: {
            ...CardConfigs.info,
            title: '重要提醒',
            theme: 'warning',
            data: {
                ...CardConfigs.info.data,
                content: '<h5>⚠️ 注意事项</h5><p>请注意系统维护时间，避免在维护期间进行重要操作。</p>'
            }
        },

        // 成功信息
        successInfo: {
            ...CardConfigs.info,
            title: '操作成功',
            theme: 'success',
            data: {
                ...CardConfigs.info.data,
                content: '<h5>✅ 操作完成</h5><p>您的操作已成功完成，系统已自动保存相关数据。</p>'
            }
        }
    },

    /**
     * 操作卡片模板
     */
    actionTemplates: {
        // 基础操作
        basicActions: {
            ...CardConfigs.action,
            title: '快速操作',
            data: {
                ...CardConfigs.action.data,
                layout: 'grid',
                actions: [
                    {
                        type: 'button',
                        label: '新建',
                        level: 'primary',
                        icon: 'fa fa-plus',
                        actionType: 'dialog',
                        dialog: {
                            title: '新建项目',
                            body: '新建对话框内容'
                        }
                    },
                    {
                        type: 'button',
                        label: '编辑',
                        level: 'info',
                        icon: 'fa fa-edit',
                        actionType: 'drawer',
                        drawer: {
                            title: '编辑项目',
                            body: '编辑抽屉内容'
                        }
                    },
                    {
                        type: 'button',
                        label: '删除',
                        level: 'danger',
                        icon: 'fa fa-trash',
                        actionType: 'ajax',
                        confirmText: '确定要删除吗？',
                        api: 'delete:/api/items/${id}'
                    }
                ]
            }
        },

        // 管理操作
        adminActions: {
            ...CardConfigs.action,
            title: '管理操作',
            theme: 'warning',
            data: {
                ...CardConfigs.action.data,
                layout: 'list',
                actions: [
                    {
                        type: 'button',
                        label: '用户管理',
                        level: 'default',
                        icon: 'fa fa-users',
                        actionType: 'url',
                        url: '/admin/users'
                    },
                    {
                        type: 'button',
                        label: '系统设置',
                        level: 'default',
                        icon: 'fa fa-cogs',
                        actionType: 'url',
                        url: '/admin/settings'
                    },
                    {
                        type: 'button',
                        label: '日志查看',
                        level: 'default',
                        icon: 'fa fa-file-text',
                        actionType: 'url',
                        url: '/admin/logs'
                    }
                ]
            }
        }
    },

    /**
     * 表格卡片模板
     */
    tableTemplates: {
        // 基础数据表格（使用API）
        basicTable: {
            ...CardConfigs.table,
            title: '用户列表',
            api: '/api/users',
            columns: [
                { name: 'id', label: 'ID', width: 80 },
                { name: 'name', label: '姓名', sortable: true },
                { name: 'email', label: '邮箱', copyable: true },
                { name: 'status', label: '状态', type: 'status', statusMap: {
                    1: '<span class="label label-success">正常</span>',
                    0: '<span class="label label-danger">禁用</span>'
                }},
                { name: 'created_at', label: '创建时间', type: 'datetime', sortable: true }
            ],
            showSearch: true,
            searchFields: [
                { name: 'name', label: '姓名', type: 'input-text', placeholder: '请输入姓名' },
                { name: 'status', label: '状态', type: 'select', options: [
                    { label: '全部', value: '' },
                    { label: '正常', value: 1 },
                    { label: '禁用', value: 0 }
                ]}
            ],
            rowActions: [
                { type: 'button', label: '编辑', level: 'link', actionType: 'dialog' },
                { type: 'button', label: '删除', level: 'link', className: 'text-danger' }
            ]
        },

        // 使用source的表格（从上下文获取数据）
        sourceTable: {
            ...CardConfigs.table,
            title: '商品列表',
            source: '${products}',
            columns: [
                { name: 'id', label: '商品ID', width: 100 },
                { name: 'name', label: '商品名称', sortable: true },
                { name: 'category', label: '分类', type: 'mapping', map: {
                    'electronics': '电子产品',
                    'clothing': '服装',
                    'books': '图书'
                }},
                { name: 'price', label: '价格', type: 'tpl', tpl: '￥${price}' },
                { name: 'inventory', label: '库存', sortable: true },
                { name: 'image', label: '图片', type: 'image', width: 100 }
            ],
            showPager: true,
            perPage: 15
        },

        // 静态数据表格
        staticTable: {
            ...CardConfigs.table,
            title: '销售报表',
            data: [
                { month: '2024-01', sales: 120000, target: 100000, growth: '+20%' },
                { month: '2024-02', sales: 150000, target: 120000, growth: '+25%' },
                { month: '2024-03', sales: 98000, target: 110000, growth: '-10%' },
                { month: '2024-04', sales: 180000, target: 150000, growth: '+20%' }
            ],
            columns: [
                { name: 'month', label: '月份', type: 'date', format: 'YYYY-MM' },
                { name: 'sales', label: '销售额', type: 'tpl', tpl: '￥${sales | number}' },
                { name: 'target', label: '目标', type: 'tpl', tpl: '￥${target | number}' },
                { name: 'growth', label: '增长率', type: 'tpl', tpl: '<span class="${growth|startsWith:\'+\'?\'text-success\':\'text-danger\'}">${growth}</span>' }
            ],
            showPager: false,
            tableConfig: {
                striped: true,
                bordered: true,
                size: 'md'
            }
        },

        // 高级表格（带搜索、批量操作）
        advancedTable: {
            ...CardConfigs.table,
            title: '订单管理',
            api: '/api/orders',
            columns: [
                { name: 'order_no', label: '订单号', sortable: true, copyable: true },
                { name: 'customer_name', label: '客户', searchable: true },
                { name: 'amount', label: '金额', type: 'tpl', tpl: '￥${amount}', sortable: true },
                { name: 'status', label: '状态', type: 'mapping', map: {
                    'pending': '<span class="label label-warning">待处理</span>',
                    'processing': '<span class="label label-info">处理中</span>',
                    'completed': '<span class="label label-success">已完成</span>',
                    'cancelled': '<span class="label label-danger">已取消</span>'
                }},
                { name: 'created_at', label: '下单时间', type: 'datetime', sortable: true }
            ],
            showSearch: true,
            searchFields: [
                { name: 'order_no', label: '订单号', type: 'input-text' },
                { name: 'customer_name', label: '客户名称', type: 'input-text' },
                { name: 'status', label: '状态', type: 'select', options: [
                    { label: '全部', value: '' },
                    { label: '待处理', value: 'pending' },
                    { label: '处理中', value: 'processing' },
                    { label: '已完成', value: 'completed' },
                    { label: '已取消', value: 'cancelled' }
                ]},
                { name: 'date_range', label: '下单时间', type: 'date-range' }
            ],
            bulkActions: [
                { type: 'button', label: '批量审核', level: 'primary' },
                { type: 'button', label: '批量导出', level: 'default' }
            ],
            rowActions: [
                { type: 'button', label: '查看', level: 'link', icon: 'fa fa-eye' },
                { type: 'button', label: '编辑', level: 'link', icon: 'fa fa-edit' },
                { type: 'button', label: '删除', level: 'link', className: 'text-danger', icon: 'fa fa-trash' }
            ],
            tableToolbar: [
                { type: 'button', label: '新建订单', level: 'primary', icon: 'fa fa-plus' },
                { type: 'button', label: '导出数据', level: 'default', icon: 'fa fa-download' }
            ]
        }
    }
};

/**
 * 获取默认配置
 * @param {string} type 卡片类型
 * @returns {Object} 默认配置
 */
function getDefaultConfig(type) {
    const config = CardConfigs[type] || {};
    return window.AmisCards.Utils.deepClone({
        ...CardConfigs.defaults,
        ...config
    });
}

/**
 * 获取预设模板
 * @param {string} type 卡片类型
 * @param {string} template 模板名称
 * @returns {Object} 模板配置
 */
function getTemplate(type, template) {
    const templates = CardTemplates[`${type}Templates`];
    if (!templates || !templates[template]) {
        throw new Error(`模板不存在: ${type}.${template}`);
    }
    
    return window.AmisCards.Utils.deepClone(templates[template]);
}

/**
 * 合并配置
 * @param {Object} baseConfig 基础配置
 * @param {Object} customConfig 自定义配置
 * @returns {Object} 合并后的配置
 */
function mergeConfig(baseConfig, customConfig) {
    return window.AmisCards.Utils.deepMerge(
        window.AmisCards.Utils.deepClone(baseConfig),
        customConfig
    );
}

/**
 * 验证配置
 * @param {Object} config 配置对象
 * @returns {Object} 验证结果
 */
function validateConfig(config) {
    const errors = [];
    const warnings = [];
    
    // 必填字段检查
    if (!config.type) {
        errors.push('缺少必填字段: type');
    }
    
    if (!config.id) {
        warnings.push('建议设置唯一的 id 字段');
    }
    
    // 类型检查
    const supportedTypes = Object.keys(CardConfigs).filter(key => key !== 'defaults');
    if (config.type && !supportedTypes.includes(config.type)) {
        errors.push(`不支持的卡片类型: ${config.type}`);
    }
    
    // 大小检查
    const supportedSizes = ['small', 'medium', 'large'];
    if (config.size && !supportedSizes.includes(config.size)) {
        warnings.push(`不推荐的大小值: ${config.size}`);
    }
    
    // 主题检查
    const supportedThemes = ['default', 'primary', 'success', 'warning', 'danger', 'info'];
    if (config.theme && !supportedThemes.includes(config.theme)) {
        warnings.push(`不推荐的主题值: ${config.theme}`);
    }
    
    return {
        valid: errors.length === 0,
        errors,
        warnings
    };
}

/**
 * 生成配置文档
 * @param {string} type 卡片类型
 * @returns {Object} 配置文档
 */
function generateConfigDocs(type) {
    const config = CardConfigs[type];
    if (!config) {
        throw new Error(`卡片类型不存在: ${type}`);
    }
    
    const docs = {
        type,
        description: `${type} 卡片配置文档`,
        properties: {},
        examples: []
    };
    
    // 生成属性文档
    function generatePropertyDocs(obj, prefix = '') {
        Object.keys(obj).forEach(key => {
            const value = obj[key];
            const propName = prefix ? `${prefix}.${key}` : key;
            
            if (typeof value === 'object' && value !== null && !Array.isArray(value)) {
                generatePropertyDocs(value, propName);
            } else {
                docs.properties[propName] = {
                    type: typeof value,
                    default: value,
                    description: `${propName} 属性`
                };
            }
        });
    }
    
    generatePropertyDocs(config);
    
    // 添加示例
    const templates = CardTemplates[`${type}Templates`];
    if (templates) {
        Object.keys(templates).forEach(templateName => {
            docs.examples.push({
                name: templateName,
                description: `${templateName} 示例`,
                config: templates[templateName]
            });
        });
    }
    
    return docs;
}

// 导出配置
window.AmisCards.CardConfigs = CardConfigs;
window.AmisCards.CardTemplates = CardTemplates;

// 导出工具函数
window.AmisCards.getDefaultConfig = getDefaultConfig;
window.AmisCards.getTemplate = getTemplate;
window.AmisCards.mergeConfig = mergeConfig;
window.AmisCards.validateConfig = validateConfig;
window.AmisCards.generateConfigDocs = generateConfigDocs;

console.log('[AmisCards.CardConfigs] 卡片配置模块已加载'); 